/*
 * @文件描述 声明主窗口类mainWin
 * @创建者 wsgalaxy<wsgalaxy@163.com>
 * @创建时间 2017-5-3
 */


#ifndef MAINWIN_H
#define MAINWIN_H

#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>
#include <QMouseEvent>

#include "musicListView.h"
#include "musicListAdapter.h"
#include "buttonNext.h"
#include "buttonPlay.h"
#include "sliderProgress.h"
#include "soundControl.h"
#include "titleBar.h"
#include "musicListControl.h"
#include "musicInfo.h"
//#include ""

/*
 * @描述 主窗口类mainWin
 */
class mainWin : public QWidget
{
    Q_OBJECT
private:
    musicListView* musicList;           //播放列表
    musicListAdapter* musicAdapter;     //播放适配器
    buttonNext* lastMusic;              //“下一个音乐”播放按钮
    buttonNext* nextMusic;              //“上一个音乐”播放按钮
    buttonPlay* playButton;             //播放/暂停按钮
    sliderProgress* musicProgress;      //音乐进度条
    soundControl* sound;                //音量控制
    titleBar* title;                    //标题栏
    QLabel* allTime;                    //当前音乐总时间标签
    QLabel* currentTime;                //当前音乐时间
    musicListControl *mlcontrol;        //列表控制控件
    musicInfo *info;                    //音乐信息显示

    musicData *currentMusic;            //当前播放的音乐
    musicHandle *currentHandle;         //当前音乐句柄
    int state;                          //当前音乐状态
    int isMusicSeted;                   //音乐是否设置
    int volume;                         //当前音量（0-100）
    int isMute;                         //是否已静音

    //QWidget *infoWidget;
    QWidget *controlBarWidget;          //放置音乐播放控制控件组

    QHBoxLayout* controlBar;            //音乐播放控制控件组的布局
    QHBoxLayout* showArea;              //上半部布局
    QVBoxLayout* mainLayout;            //主布局
    QVBoxLayout* infoArea;              //信息显示布局
    QVBoxLayout* musicListLayout;       //音乐列表布局

    QPoint lastPoint;                   //移动窗口时的上一个点

public:
    explicit mainWin(QWidget *parent = 0);



signals:
    /*
     * @描述 设置播放控制按钮状态，音乐结束时发出
     * @参数 state 状态
     */
    void setPlayButtonState(int state);



public slots:
    /*
     * @描述 移动窗口事件
     * @参数 event 鼠标事件信息
     */
    void moveWindows(QMouseEvent* event);

    /*
     * @描述 标题被按下
     * @参数 event 鼠标事件信息
     */
    void titlePressed(QMouseEvent* event);
    /*
     * @描述 设置要播放的音乐
     * @参数 data 要播放的音乐
     */
    void getPlayMusic(musicData* data);

    /*
     * @描述 音乐解码完成
     */
    void processFinished();

    /*
     * @描述 音乐从列表中删除
     * @参数 data 要删除的音乐
     */
    void removeMusic(musicData* data);

    /*
     * @描述 音乐播放控制按钮状态发生改变
     * @参数 state 状态
     */
    void playButtonStateChanged(int state);

    //void musicStop();
    /*
     * @描述 停止当前音乐播放线程
     */
    void stopCurrentMusic();

    /*
     * @描述 控制音乐播放
     */
    void musicPlay();
    void musicPause();

    /*
     * @描述 改变音乐控制条范围
     * @参数 min max 范围
     */
    void progressRangeChanged(int min, int max);

    /*
     * @描述 改变音乐控制条值
     * @参数 v 值
     */
    void progressValueChanged(int v);

    /*
     * @描述 改变音量
     * @参数 v 音量
     */
    void volumeChanged(int v);

    /*
     * @描述 设置静音
     * @参数 s 状态
     */
    void muteChanged(int s);

    /*
     * @描述 播放下一个/上一个音乐
     * @参数 s 指定上一个或下一个
     */
    void getNext(int s);

    void minWindow();   //最小化窗口
};

#endif // MAINWIN_H
